package com.example.forum.services;

import com.example.forum.model.SystemConfig;
import java.util.List;
import java.util.Map;

/**
 * 系统配置服务接口
 */
public interface ISystemConfigService {
    /**
     * 根据配置键获取配置值
     * @param configKey 配置键
     * @return 配置值
     */
    String getConfigValue(String configKey);

    /**
     * 根据配置键获取配置值，如果不存在则返回默认值
     * @param configKey 配置键
     * @param defaultValue 默认值
     * @return 配置值或默认值
     */
    String getConfigValueOrDefault(String configKey, String defaultValue);

    /**
     * 保存或更新配置项
     * @param configKey 配置键
     * @param configValue 配置值
     * @param description 描述
     * @param groupName 分组名
     * @return 是否成功
     */
    boolean saveOrUpdateConfig(String configKey, String configValue, String description, String groupName);

    /**
     * 批量保存或更新配置项
     * @param configs 配置项映射表 (key -> value)
     * @param groupName 分组名
     * @return 是否成功
     */
    boolean batchSaveOrUpdateConfig(Map<String, String> configs, String groupName);

    /**
     * 根据分组名获取配置项
     * @param groupName 分组名
     * @return 配置项列表
     */
    List<SystemConfig> getConfigsByGroup(String groupName);

    /**
     * 获取所有配置项
     * @return 所有配置项
     */
    List<SystemConfig> getAllConfigs();
    
    /**
     * 根据分组名获取配置Map
     * @param groupName 分组名
     * @return 配置Map (key -> value)
     */
    Map<String, String> getConfigMapByGroup(String groupName);
    
    /**
     * 获取所有基本设置
     * @return 基本设置Map
     */
    Map<String, String> getBasicSettings();
    
    /**
     * 获取所有内容设置
     * @return 内容设置Map
     */
    Map<String, String> getContentSettings();
    
    /**
     * 获取所有邮件设置
     * @return 邮件设置Map
     */
    Map<String, String> getEmailSettings();
    
    /**
     * 获取所有第三方集成设置
     * @return 第三方集成设置Map
     */
    Map<String, String> getIntegrationSettings();
    
    /**
     * 保存基本设置
     * @param settings 基本设置Map
     * @return 是否成功
     */
    boolean saveBasicSettings(Map<String, String> settings);
    
    /**
     * 保存内容设置
     * @param settings 内容设置Map
     * @return 是否成功
     */
    boolean saveContentSettings(Map<String, String> settings);
    
    /**
     * 保存邮件设置
     * @param settings 邮件设置Map
     * @return 是否成功
     */
    boolean saveEmailSettings(Map<String, String> settings);
    
    /**
     * 保存第三方集成设置
     * @param settings 第三方集成设置Map
     * @return 是否成功
     */
    boolean saveIntegrationSettings(Map<String, String> settings);
    
    /**
     * 初始化系统默认配置
     */
    void initDefaultConfigs();
} 